
int main(int argc, char * argv[]) {
    /* @autoreleasepool */ { __AtAutoreleasePool __autoreleasepool;
        // p 局部变量
        Person *p = ((Person *(*)(id, SEL))(void *)objc_msgSend)((id)((Person *(*)(id, SEL))(void *)objc_msgSend)((id)objc_getClass("Person"), sel_registerName("alloc")), sel_registerName("init"));
        /**
         (void *)objc_msgSend
         ------------------------
         objc对象 -本质-> 指针 -本质-> 结构体
         objc方法 -本质-> C函数 === 函数调用栈(有可能开辟栈空间，有可能直接返回一个基础常亮值)
         ------------------------

         栈区（stack）：编译器自动分配释放，存放函数的参数值，局部变量的值等，其操作方式类似于数据结构的栈。
         堆区（heap）：一般是由程序员分配释放，若程序员不释放的话，程序结束时可能由OS回收，值得注意的是他与数据结构的堆是两回事，分配方式倒是类似于数据结构的链表。

         参考：https://blog.csdn.net/u012836896/article/details/89973820
         ------------------------


         方法在 `栈空间`: 2^10= `1024b` 、 2^20=`1M` 、 2^32 ~ 4G
             32位系统中 (32个`二进制位`)
                 对象占用内存空间: xx*8=32 ---> 4位 --> 4个字节的内存
             64位系统中 (64个`二进制位`)
                 对象占用内存空间: xx*8=64 ---> 8位
         -------------------------

         结构体在 `堆空间`:

             // C 函数， create new copy，默认都会开辟堆空间 (malloc)
             // OC 中 create 和 ref 也是和C一样的封装理念，是需要开辟空间才能用
                CFRunLoopObserveRef observer; ==> malloc
             //
             free(observer); // C 释放
             CFRelease(observer); // OC 释放
             // 为什么苹果有封装了 CFRelease
                答: observer 因为不同功能的结构体，苹果可能会开辟多个指针，so free(结构体)，但是内部还有很多需要 free去释放，
                    而内部的堆空间，我们不知道如何释放，因为拿不到内存地址。

         叶子函数(Leaf Function)==最后一个函数

         */

        ((void (*)(id, SEL, NSString * _Nonnull))(void *)objc_msgSend)((id)p, sel_registerName("setName:"), (NSString *)&__NSConstantStringImpl__var_folders_0g_9hfjnn6j2vl5r7qkk62tdnqm0000gn_T_main_940248_mi_0);

        ((void (*)(id, SEL, NSInteger))(void *)objc_msgSend)((id)p, sel_registerName("setAge:"), (NSInteger)188999);

        ((void (*)(id, SEL))(void *)objc_msgSend)((id)p, sel_registerName("run"));

        NSLog((NSString *)&__NSConstantStringImpl__var_folders_0g_9hfjnn6j2vl5r7qkk62tdnqm0000gn_T_main_940248_mi_1);
    }
    return 0;
}
